package com.ophiux.reflection;


import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * @desc: 反射：运行过程中，动态获取类的信息和对类进行操作机制
 * @author: hhl
 * @date：2024/2/20 9:00
 */
public class ReflectionTest {
    public static void main(String[] args) throws Exception {
        //方法1
        Class<?> clazz = Class.forName("com.ophiux.reflection.Student");
        Object o = clazz.newInstance();

        Field[] declaredFields = clazz.getDeclaredFields();
        for (Field field : declaredFields) {
            //打印属性信息，包括访问控制修饰符，类型及属性名
            System.out.println(field);
            System.out.println("修饰符：" + Modifier.toString(field.getModifiers()));
            System.out.println("类型：" + field.getType());
            System.out.println("属性名：" + field.getName());

        }


        //通过Class对象创建实例
        Student student = (Student)clazz.newInstance();
        //获取属性名为studentName的字段(Field)对象，以便下边重新设置它的值
        Field studentName = clazz.getField("name");
        //设置studentName的值为”张三“
        studentName.set(student, "张三");



        Class<Student> studentsClass = Student.class;


    }
}
